///////////////////////////////////////////////////////////////////////////////
// File:        Realmd.hpp
// Author:      671643387@qq.com
// Description: 
///////////////////////////////////////////////////////////////////////////////

#if !defined(REALMD_REALMD_HPP_)
#define REALMD_REALMD_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include "RealmdPlayerManager.hpp"
#include "RealmList.hpp"
#include "database/SqlDatabase.hpp"

typedef MysqlDatabase   Database;

///////////////////////////////////////////////////////////////////////////////
class Realmd
{
public:
    ///////////////////////////////////////////////////////////////////////////
    Realmd(void);
    ~Realmd(void);

    ///////////////////////////////////////////////////////////////////////////
    bool Initialize(void);
    void Run(void);
    void Stop(void);

    void Free(void);

    ///////////////////////////////////////////////////////////////////////////
    static Realmd* GetMe(void);
    static Database* GetDB(void);
    static RealmList* GetRealmList(void);

private:
    ///////////////////////////////////////////////////////////////////////////
    void _DoCleanup(void);

private:
    ///////////////////////////////////////////////////////////////////////////
    Database            loginDB_;
    RealmdPlayerManager playerMgr_;
    RealmList           realmList_;

    static Realmd*      sInst_;
};

#endif //REALMD_REALMD_HPP_
